// src/utils/configWatcher.js
import { ConfigApi } from '@/api/config'
import { useConfigStore } from '@/stores/configStore'

class ConfigWatcher {
    constructor() {
        this.timer = null
        this.interval = 300000 // 5分钟
    }

    // 开始监听配置变化
    startWatching() {
        this.timer = setInterval(async () => {
            try {
                const configStore = useConfigStore()
                const response = await ConfigApi.getPublicConfig()

                if (response.code === 200) {
                    // 检查配置是否有变化
                    if (JSON.stringify(response.data) !== JSON.stringify(configStore.publicConfig)) {
                        // 更新配置
                        configStore.publicConfig = response.data
                        console.log('配置已更新:', response.data)

                        // 触发配置更新事件
                        this.onConfigUpdated(response.data)
                    }
                }
            } catch (error) {
                console.error('检查配置更新失败:', error)
            }
        }, this.interval)
    }

    // 停止监听
    stopWatching() {
        if (this.timer) {
            clearInterval(this.timer)
            this.timer = null
        }
    }

    // 配置更新回调函数
    onConfigUpdated(newConfig) {
        // 处理配置更新后的逻辑
        this.applyConfigChanges(newConfig);

        // 派发事件供其他组件使用
        window.dispatchEvent(new CustomEvent('configUpdated', { detail: newConfig }))
    }
    // 应用配置变化的具体逻辑
    applyConfigChanges(newConfig) {
        // 示例：更新主题
        if (newConfig.theme) {
            const themeStore = useThemeStore();
            themeStore.setTheme(newConfig.theme);
        }

        // 示例：更新语言
        if (newConfig.language) {
            // 更新语言设置逻辑
            this.updateLanguage(newConfig.language);
        }

        // 示例：更新其他配置项
        if (newConfig.appName) {
            document.title = newConfig.appName;
        }

        // 可以继续添加其他配置项的处理逻辑
        console.log('已应用新的配置:', newConfig);
    }

    // 更新语言设置的示例方法
    updateLanguage(language) {
        // 实际的语言更新逻辑
        // 例如更新 i18n 实例或存储
        localStorage.setItem('language', language);
        // 如果使用了 i18n，可能需要重新加载语言包
    }



}

export default new ConfigWatcher()
